﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Controller2.BLL;
using Controller2.Models;
using Controller2.Models.ViewModels;
using Telerik.Web.Mvc;

namespace Controller2.Controllers
{
    [Authorize(Roles = "SysAdmin")]
    public class EstadoController : Controller
    {
        ControllerBDModelContainer db = new ControllerBDModelContainer();
        EstadoViewModel viewModel = new EstadoViewModel();

        public ActionResult Index()
        {
            ViewBag.IsInRole = User.IsInRole("SysAdmin") ? true : false;
            var dic = new Dictionary<string, int>();
            dic.Add("Código", 1);
            dic.Add("Nome", 2);
            dic.Add("Sigla", 3);
            ViewBag.Pesquisa = PesquisaBll.PreencheComboPesquisa(dic, "Consulta de Estados: ");
            Session["texto"] = "";
            Session["filtro"] = 0;
            return View();
        }

        [GridAction]
        public ActionResult AjaxGrid()
        {
            var texto = Session["texto"].ToString();
            var filtro = Convert.ToInt32(Session["filtro"]);
            var mid = new GridModel { Data = viewModel.Listar(db, texto, filtro) };
            return View(mid);
        }

        [HttpPost]
        public ActionResult Pesquisa(string texto, int filtro)
        {
            Session["texto"] = texto;
            Session["filtro"] = filtro;
            return Json(new { salvo = true });
        }

        public ActionResult Cadastro(int id)
        {
            var est = new Estado();
            if (id > 0)
                est = EstadoBll.GetEstado(db, id);

            ViewBag.Estado = new SelectList(db.Estado.ToList(), "IdEstado", "NomeEstado");

            return View(est);
        }

        [HttpPost]
        public ActionResult Salvar(Estado estado)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (estado.IdEstado > 0)
                    {
                        var e = EstadoBll.GetEstado(db, estado.IdEstado);
                        TryUpdateModel(e);
                        db.Estado.ApplyCurrentValues(e);
                    }
                    else
                    {
                        var e = new Estado();
                        TryUpdateModel(e);
                        db.Estado.AddObject(e);
                    }
                    db.SaveChanges();

                    if (Request.IsAjaxRequest())
                    {
                        return Json(new { salvo = true });
                    }
                    return RedirectToAction("Index");
                }
                catch (Exception ex)
                {
                    if (Request.IsAjaxRequest())
                    {
                        string msgEx;
                        if (ex.InnerException == null)
                        {
                            msgEx = ex.Message;
                        }
                        else
                        {
                            msgEx = ex.InnerException.Message;
                        }
                        return Json(new { salvo = false, error = msgEx });
                    }
                    ModelState.AddModelError(string.Empty, ex);
                    return View(estado);
                }
            }
            else
			{
				if (Request.IsAjaxRequest())
				{
					var msgEx = "Houve um erro desconhecido e não foi possível executar a operação!<br /><br />Por favor, tente novamente mais tarde ou entre em contato com o Administrador do Sistema.";
					return Json(new { salvo = false, error = msgEx });
				}
                return View(estado);
            }
        }

        public ActionResult Excluir(int id)
        {
            try
            {
                var est = EstadoBll.GetEstado(db, id);
                db.Estado.DeleteObject(est);
                db.SaveChanges();

                return Json(new { salvo = true });
            }
            catch (Exception ex)
            {
                string msgEx;
                if (ex.InnerException == null)
                {
                    msgEx = ex.Message;
                }
                else
                {
                    msgEx = ex.InnerException.Message;
                }

                return Json(new { salvo = false, error = "Houve um erro na gravação dos dados: <br /><br />" + msgEx });
            }
        }

        [HttpPost]
        public JsonResult AutoComplete(int filtro, string termoPesquisa)
        {
            var data = EstadoBll.AutoComplete(db, filtro, termoPesquisa, 10);
            return Json(data);
        }
    }
}
